// list：购物车列表；id：需要修改的项；num：+1是增加一个，-1是减少一个
function count(list, id, num) {
    const index = list.findIndex((d) => d.id === id) // 2、根据id取到对应的项 findIndex --> index
    list[index].count = list[index].count + num // 3、根据index去修改对应的项里面的count属性，加一
    // list[index].done = !list[index].done
    return [...list] // 4、把修改后的数组浅拷贝然后返回
}
export default (currentState, action) => {
    const { type, data } = action
    switch (type) {
        case "INIT":
            return { ...currentState, user: data }
        case "ADD_CART":
            // data里面会包括所有的商品信息，其中也包括商品id，需要分为两种情况：
            // 1、该商品id，已经在购物车列表中存在，这时候需要对商品的数量加1
            const index = currentState.cart.findIndex((d) => d.id === data[0].id)
            // 表示能找到对应商品，就变成了数量加1操作，复用+1的代码
            // ID不存在，表示商品不在列表中存在，需要添加到列表头部
            return index > -1
                ? { cart: count(currentState.cart, data[0].id, 1) }
                : { cart: [{ ...data[0], count: 1 }, ...currentState.cart] } // 新增的时候需要添加一个购物车才有的属性count为1
        case "DEL_CART":
            // 从currentState.cart里面，根据data.id，删除对应项，然后返回删除后的数据
            return { cart: [] }
        case "ADD_ONE":
            return { cart: count(currentState.cart, data.id.id, 1) }
            
        case "SUB_ONE":
            return data.id.count > 1 
                ? { cart: count(currentState.cart, data.id.id, -1) }
                : { cart: currentState.cart.filter((d) => d.id !== data.id.id) }
            // console.log(data)
        default:
            return { ...currentState }
    }
}